// @created: caoshi
// @date: 2021-06-21 20:33
// 请求响应
package response

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

// 响应内容结构
type Response struct {
	Code int         `json:"code"`
	Data interface{} `json:"data"`
	Msg  string      `json:"msg"`
}

// 请求结果状态码
const (
	/**
	操作失败, 注意这个操作失败是请求响应成了
	但是请求的结果是不正确的. 譬如输入验证码错误用户不能登录
	*/
	ERROR   = 7
	SUCCESS = 0 // 成功
)

// 响应结果, 这里都是请求成功了, 请求的结果是否正确不确定
func Result(code int, data interface{}, msg string, ctx *gin.Context) {
	ctx.JSON(http.StatusOK, Response{
		Code: code,
		Data: data,
		Msg:  msg,
	})
}

// 封装成响应函数
/**
成功
*/
// map[string]interface{}{} 空 map 对象
func Ok(c *gin.Context) {
	Result(SUCCESS, map[string]interface{}{}, "操作成功", c)
}

func OkWithMessage(msg string, c *gin.Context) {
	Result(SUCCESS, map[string]interface{}{}, msg, c)
}

func OkWithData(data interface{}, c *gin.Context) {
	Result(SUCCESS, data, "操作成功", c)
}

func OkWithDetailed(data interface{}, msg string, c *gin.Context) {
	Result(SUCCESS, data, msg, c)
}

/**
失败
*/
func Fail(c *gin.Context) {
	Result(ERROR, map[string]interface{}{}, "操作失败", c)
}

func FailWithMessage(msg string, c *gin.Context) {
	Result(ERROR, map[string]interface{}{}, msg, c)
}

func FailWithDetailed(data interface{}, msg string, c *gin.Context) {
	Result(ERROR, data, msg, c)
}
